package reflect.test.test1;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 属性，修饰符，构造方法，继承
 * @version 1.0
 * @author:罗苏琴
 * @Date 2024/12/3 上午9:08
 */
public class GetStudent {
    public static void main(String[] args) {
        //创建Student的类
        Class clz= Student.class;
        //获取Student类的信息（类名，父类，父接口，访问修饰符）
        System.out.println("类名："+clz.getSimpleName());
        System.out.println("完全限定名："+clz.getName());
        System.out.println("Student类的父类："+clz.getSuperclass().getName());
        Class [] in=clz.getInterfaces();
        System.out.print("父类的接口：");
        for(Class ain: in){
            System.out.println(ain.getName());
        }
        System.out.print("访问修饰符:");
        int modifier=clz.getModifiers();
        //判断该属性的访问修饰符
        if((modifier & Modifier.PUBLIC)==Modifier.PUBLIC){
            System.out.println("public");
        }else if((modifier & Modifier.PROTECTED)==Modifier.PROTECTED){
            System.out.println("protected");
        } else if ((modifier & Modifier.PRIVATE)==Modifier.PRIVATE) {
            System.out.println("private");
        }else {
            System.out.println("default(package)");
        }
        if((modifier &Modifier.STATIC)==Modifier.STATIC)
            System.out.println("这是一个静态属性");
        if((modifier & Modifier.FINAL)==Modifier.FINAL){
            System.out.println("这是一个final属性");
            System.out.println("---------------------------------------------");
        }
        System.out.println("======================构造方法==================");
        Constructor [] con =clz.getDeclaredConstructors();//getDeclared声明的意思
        for(Constructor anCons:con){
            System.out.println("构造方法名:"+anCons.getName());
            Class [] params=anCons.getParameterTypes();
            System.out.println("构造方法的参数个数："+anCons.getParameterCount());
        }
        System.out.println("=================所有属性==============");
        Field [] fields=clz.getDeclaredFields();
        for (Field field:fields){
            System.out.println("属性名："+field.getName());
            System.out.println("类型："+field.getType().getName());
        }
        Method [] methods=clz.getDeclaredMethods();
        System.out.println("==================方法展示=========================");
        for(Method method:methods){
            System.out.println("方法名："+method.getName());
            System.out.println("返回值类型："+method.getReturnType().getName());
        }
    }
}